/**
 * 时区处理工具函数
 * 统一使用UTC时间标准，确保前后端时间一致性
 */

/**
 * 将本地日期转换为UTC日期字符串 (YYYY-MM-DD格式)
 * @param {Date|String} date - 输入日期
 * @returns {String} UTC日期字符串
 */
export function toUTCDateString(date) {
  if (!date) return null
  
  const dateObj = typeof date === 'string' ? new Date(date) : date
  if (isNaN(dateObj.getTime())) {
    console.error('Invalid date:', date)
    return null
  }
  
  const utcYear = dateObj.getUTCFullYear()
  const utcMonth = String(dateObj.getUTCMonth() + 1).padStart(2, '0')
  const utcDay = String(dateObj.getUTCDate()).padStart(2, '0')
  
  return `${utcYear}-${utcMonth}-${utcDay}`
}

/**
 * 将本地日期转换为UTC ISO字符串
 * @param {Date|String} date - 输入日期
 * @returns {String} UTC ISO字符串
 */
export function toUTCISOString(date) {
  if (!date) return null
  
  const dateObj = typeof date === 'string' ? new Date(date) : date
  if (isNaN(dateObj.getTime())) {
    console.error('Invalid date:', date)
    return null
  }
  
  return dateObj.toISOString()
}

/**
 * 获取当前UTC日期字符串
 * @returns {String} 当前UTC日期 (YYYY-MM-DD格式)
 */
export function getCurrentUTCDate() {
  const now = new Date()
  return toUTCDateString(now)
}

/**
 * 创建UTC日期对象 (时间设为00:00:00)
 * @param {String} dateString - 日期字符串 (YYYY-MM-DD格式)
 * @returns {Date} UTC日期对象
 */
export function createUTCDate(dateString) {
  if (!dateString) return null
  
  const [year, month, day] = dateString.split('-').map(Number)
  if (!year || !month || !day) {
    console.error('Invalid date string format:', dateString)
    return null
  }
  
  return new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))
}

/**
 * 将UTC日期字符串转换为本地显示日期
 * @param {String} utcDateString - UTC日期字符串
 * @param {String} locale - 本地化设置，默认为中文
 * @returns {String} 本地化日期字符串
 */
export function formatUTCDateForDisplay(utcDateString, locale = 'zh-CN') {
  if (!utcDateString) return ''
  
  const date = new Date(utcDateString)
  if (isNaN(date.getTime())) {
    console.error('Invalid UTC date string:', utcDateString)
    return utcDateString
  }
  
  return date.toLocaleDateString(locale, {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit'
  })
}

/**
 * 验证日期格式 (YYYY-MM-DD)
 * @param {String} dateString - 日期字符串
 * @returns {Boolean} 是否为有效格式
 */
export function isValidDateFormat(dateString) {
  if (!dateString || typeof dateString !== 'string') return false
  
  const dateRegex = /^\d{4}-\d{2}-\d{2}$/
  if (!dateRegex.test(dateString)) return false
  
  const date = new Date(dateString)
  return !isNaN(date.getTime())
}

/**
 * 获取UTC时区信息
 * @returns {Object} 时区信息对象
 */
export function getUTCTimezoneInfo() {
  const now = new Date()
  return {
    current_time: now.toISOString(),
    utcOffset: now.getTimezoneOffset(),
    timezone: 'UTC+0',
    timezone_offset: 0,
    localTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone
  }
}

/**
 * 日期范围验证
 * @param {String} startDate - 开始日期 (YYYY-MM-DD)
 * @param {String} endDate - 结束日期 (YYYY-MM-DD)
 * @returns {Object} 验证结果
 */
export function validateDateRange(startDate, endDate) {
  if (!startDate || !endDate) {
    return { valid: false, message: '请选择完整的日期范围' }
  }
  
  if (!isValidDateFormat(startDate) || !isValidDateFormat(endDate)) {
    return { valid: false, message: '日期格式不正确' }
  }
  
  const start = createUTCDate(startDate)
  const end = createUTCDate(endDate)
  
  if (start > end) {
    return { valid: false, message: '开始日期不能晚于结束日期' }
  }
  
  const diffTime = Math.abs(end - start)
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
  
  if (diffDays > 90) {
    return { valid: false, message: '日期范围不能超过90天' }
  }
  
  return { valid: true, message: `查询范围：${diffDays + 1}天`, dayCount: diffDays + 1 }
}

/**
 * 为API调用准备日期参数
 * @param {Date|String} date - 输入日期
 * @returns {String} 用于API调用的UTC日期字符串
 */
export function prepareDateForAPI(date) {
  return toUTCDateString(date)
}

/**
 * DatePicker组件的UTC配置选项
 * @returns {Object} DatePicker配置对象
 */
export function getDatePickerOptions() {
  return {
    format: 'yyyy-MM-dd',
    transfer: true,
    placeholder: '选择日期',
    clearable: false,
    disabledDate(date) {
      // 限制选择范围：从今天起往后7天
      const today = new Date()
      today.setHours(0, 0, 0, 0) // 设置为今天开始
      
      const maxDate = new Date(today)
      maxDate.setDate(today.getDate() + 6) // 今天+6天=7天范围
      maxDate.setHours(23, 59, 59, 999) // 设置为第7天结束
      
      return date < today || date > maxDate
    }
  }
}